package a.j.b;

import a.c.e;
import a.d.u;
import a.j.g;
import a.j.ng;
import a.j.qb;
import a.j.sc;

import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.util.Iterator;
import java.util.List;

public class c
  extends a
{
  public static final byte g = 1;
  public static final byte h = 2;
  private f.p_ i;
  private f.n_ j;
  private g.c_ k = new g.c_();
  private g.b_ l;
  private f.q_ m;
  private f.o_ n;
  private f.q_ o;
  private f.o_ p;
  private m q = new m();
  private byte r = 1;
  private boolean s = true;
  private int t;
  private int u;
  private int v;
  private int w = 2147483647;
  private int x = 2147483647;
  public static int y;
  
  public m h()
  {
    return this.q;
  }
  
  public void a(m paramm)
  {
    this.q = paramm;
  }
  
  public boolean a(double paramDouble1, double paramDouble2)
  {
    int i1 = f.Wb;
    this.j = null;
    this.i = null;
    if (i1 == 0) {
      if (this.e != null)
      {
        if (i1 != 0) {
          break label202;
        }
        if (this.f != null)
        {
          sc localsc = new sc(this.e, paramDouble1, paramDouble2, true);
          e locale = a(localsc);
          if (i1 != 0) {
            break label205;
          }
          if (locale != null)
          {
            g localg = this.e.a();
            if (i1 != 0) {
              break label205;
            }
            if ((localg != null) && (a(localg, locale) == this.f))
            {
              f.p_ localp_ = this.f.eb().a(paramDouble1, paramDouble2);
              if (localp_ != null)
              {
                if (i1 != 0) {
                  break label152;
                }
                if (a(localp_, paramDouble1, paramDouble2))
                {
                  this.i = localp_;
                  return true;
                }
              }
              label152:
              f.n_ localn_ = this.f.eb().b(paramDouble1, paramDouble2);
              if (i1 != 0) {
                break label205;
              }
              if (localn_ != null)
              {
                if (i1 != 0) {
                  break label206;
                }
                if (a(localn_, paramDouble1, paramDouble2))
                {
                  this.j = localn_;
                  return true;
                }
              }
            }
          }
        }
      }
    }
    label202:
    g();
    label205:
    label206:
    return false;
  }
  
  protected boolean a(f.n_ paramn_, double paramDouble1, double paramDouble2)
  {
    int i1 = f.Wb;
    if ((i1 != 0) || ((k() == 2) || ((i1 != 0) || (paramn_.e())))) {
      if (i1 != 0) {}
    }
    return a(this.f, paramn_, paramDouble1, paramDouble2, l());
  }
  
  protected boolean a(f.p_ paramp_, double paramDouble1, double paramDouble2)
  {
    int i1 = f.Wb;
    if ((i1 != 0) || ((k() == 2) || ((i1 != 0) || (paramp_.e())))) {
      if (i1 != 0) {}
    }
    return a(this.f, paramp_, paramDouble1, paramDouble2, l());
  }
  
  protected void b(double paramDouble1, double paramDouble2)
  {
    int i1 = f.Wb;
    if (i1 == 0) {
      if (a(paramDouble1, paramDouble2)) {
        if (i1 == 0)
        {
          if (this.j == null)
          {
            if (i1 != 0) {
              break label281;
            }
            if (this.i == null) {}
          }
          else
          {
            this.m = null;
            this.n = null;
            this.t = -1;
          }
        }
        else
        {
          this.v = 0;
          Rectangle2D localRectangle2D = null;
          if (i1 == 0) {
            if (this.i != null)
            {
              localRectangle2D = this.i.h();
              this.k.a(a(this.i, localRectangle2D));
              this.m = this.i.a();
              this.t = this.i.b();
              this.v = b(this.i);
              break label225;
            }
          }
          if ((i1 != 0) || (this.j != null))
          {
            localRectangle2D = this.j.h();
            this.k.a(a(this.j, localRectangle2D));
            this.n = this.j.a();
            this.t = this.j.b();
            this.v = b(this.j);
          }
          label225:
          this.e.a(this.k);
          this.e.a(localRectangle2D);
          this.o = this.m;
          this.p = this.n;
          if (i1 != 0) {
            break label281;
          }
          this.u = this.t;
          if (!f.Vb) {
            return;
          }
        }
      }
    }
    label281:
    g();
  }
  
  protected void c(double paramDouble1, double paramDouble2)
  {
    int i1 = f.Wb;
    if (i1 == 0) {
      if (this.i != null)
      {
        if (i1 != 0) {
          break label167;
        }
        if (this.i.b() >= 0)
        {
          f(paramDouble1, paramDouble2);
          if (i1 == 0) {
            if (this.m != this.o)
            {
              this.e.a().z();
              try
              {
                this.q.a(this.i, this.o);
                this.q.a(this.i, this.u);
              }
              finally
              {
                this.e.a().A();
              }
            }
          }
          if (i1 != 0) {
            break label317;
          }
          if (this.t == this.u) {
            break label316;
          }
          this.q.a(this.i, this.u);
          if (i1 != 0) {
            return;
          }
          if (!f.Vb) {
            break label316;
          }
        }
      }
    }
    label167:
    if (i1 == 0) {
      if (this.j != null)
      {
        if (i1 != 0) {
          break label317;
        }
        if (this.j.b() >= 0)
        {
          g(paramDouble1, paramDouble2);
          if (i1 == 0) {
            if (this.n != this.p)
            {
              this.e.a().z();
              try
              {
                this.q.a(this.j, this.p);
                this.q.a(this.j, this.u);
              }
              finally
              {
                this.e.a().A();
              }
            }
          }
          if (i1 != 0) {
            break label317;
          }
          if (this.t != this.u) {
            this.q.a(this.j, this.u);
          }
        }
      }
    }
    label316:
    label317:
    d();
  }
  
  protected void d(double paramDouble1, double paramDouble2)
  {
    int i5 = f.Wb;
    boolean bool = f.Vb;
    Object localObject1;
    Rectangle2D localRectangle2D1;
    double d3;
    double d4;
    double d5;
    Object localObject2;
    if (i5 == 0) {
      if (this.i != null)
      {
        f(paramDouble1, paramDouble2);
        if (i5 == 0)
        {
          if ((this.o instanceof f.r_))
          {
            localObject1 = (f.r_)this.o;
            if (i5 == 0) {}
            int i1 = ((f.r_)localObject1).n() > this.u ? this.u : this.u - 1;
            localRectangle2D1 = ((f.r_)localObject1).e(i1).h();
            d3 = localRectangle2D1.getX();
            d4 = localRectangle2D1.getY();
            d5 = localRectangle2D1.getWidth();
            double d6 = this.i.g();
            if (i5 == 0)
            {
              if (((f.r_)localObject1).n() <= this.u) {
                d4 += localRectangle2D1.getHeight();
              }
              this.k.a(a(this.i, new Rectangle2D.Double(d3, d4, d5, d6)));
              if (i5 != 0) {
                return;
              }
            }
            if (!bool) {
              break label1069;
            }
          }
          if (i5 != 0) {
            break label1070;
          }
        }
        if (!(this.o instanceof f.p_)) {
          break label1069;
        }
        localObject1 = (f.p_)this.o;
        if (i5 == 0) {
          if (((f.p_)localObject1).o().isEmpty())
          {
            Rectangle2D localRectangle2D2 = ((f.p_)localObject1).h();
            d1 = localRectangle2D2.getX();
            d3 = localRectangle2D2.getY();
            d4 = localRectangle2D2.getWidth();
            d5 = localRectangle2D2.getHeight();
            localObject2 = ((f.p_)localObject1).i();
            if (i5 == 0)
            {
              if (localObject2 != null)
              {
                d1 += ((u)localObject2).c;
                d3 += ((u)localObject2).b;
                d4 -= ((u)localObject2).c + ((u)localObject2).e;
              }
            }
            else {
              d5 -= ((u)localObject2).b + ((u)localObject2).d;
            }
            if (i5 != 0) {
              break label544;
            }
            if (d5 >= this.i.g()) {
              break label507;
            }
            d5 = this.i.g();
            if (i5 != 0) {
              break label544;
            }
            if (!bool) {
              break label507;
            }
          }
        }
        if (i5 == 0) {}
        int i3 = ((f.p_)localObject1).n() > this.u ? this.u : this.u - 1;
        localObject2 = ((f.p_)localObject1).e(i3).h();
        double d1 = ((Rectangle2D)localObject2).getX();
        d4 = ((Rectangle2D)localObject2).getWidth();
        d5 = this.i.g();
        d3 = ((Rectangle2D)localObject2).getY();
        if (i5 == 0)
        {
          if (((f.p_)localObject1).n() <= this.u) {
            d3 += ((Rectangle2D)localObject2).getHeight();
          }
          label507:
          this.k.a(a(this.i, new Rectangle2D.Double(d1, d3, d4, d5)));
          if (i5 != 0) {
            return;
          }
        }
        label544:
        if (!bool) {
          break label1069;
        }
      }
    }
    if (i5 == 0) {
      if (this.j != null)
      {
        g(paramDouble1, paramDouble2);
        if (i5 == 0)
        {
          if ((this.p instanceof f.r_))
          {
            localObject1 = (f.r_)this.p;
            if (i5 == 0) {}
            int i2 = ((f.r_)localObject1).k() > this.u ? this.u : this.u - 1;
            localRectangle2D1 = ((f.r_)localObject1).c(i2).h();
            d3 = localRectangle2D1.getX();
            d4 = localRectangle2D1.getY();
            d5 = this.j.g();
            double d7 = localRectangle2D1.getHeight();
            if (i5 == 0)
            {
              if (((f.r_)localObject1).k() <= this.u) {
                d3 += localRectangle2D1.getWidth();
              }
              this.k.a(a(this.j, new Rectangle2D.Double(d3, d4, d5, d7)));
              if (i5 != 0) {
                return;
              }
            }
            if (!bool) {}
          }
          else
          {
            if (i5 != 0) {
              break label1070;
            }
          }
        }
        else if ((this.p instanceof f.n_))
        {
          localObject1 = (f.n_)this.p;
          if (i5 == 0) {
            if (((f.n_)localObject1).l().isEmpty())
            {
              Rectangle2D localRectangle2D3 = ((f.n_)localObject1).h();
              d2 = localRectangle2D3.getX();
              d3 = localRectangle2D3.getY();
              d4 = localRectangle2D3.getWidth();
              d5 = localRectangle2D3.getHeight();
              localObject2 = ((f.n_)localObject1).i();
              if (i5 == 0)
              {
                if (localObject2 != null)
                {
                  d2 += ((u)localObject2).c;
                  d3 += ((u)localObject2).b;
                  d4 -= ((u)localObject2).c + ((u)localObject2).e;
                }
              }
              else {
                d5 -= ((u)localObject2).b + ((u)localObject2).d;
              }
              if (i5 == 0)
              {
                if (d4 >= this.j.g()) {
                  break label1039;
                }
                if (i5 != 0) {
                  break label1040;
                }
                d4 = this.j.g();
              }
              if (!bool) {
                break label1039;
              }
            }
          }
          if (i5 == 0) {}
          int i4 = ((f.n_)localObject1).k() > this.u ? this.u : this.u - 1;
          localObject2 = ((f.n_)localObject1).c(i4).h();
          double d2 = ((Rectangle2D)localObject2).getX();
          d3 = ((Rectangle2D)localObject2).getY();
          d4 = this.j.g();
          d5 = ((Rectangle2D)localObject2).getHeight();
          if (((f.n_)localObject1).k() <= this.u) {
            d2 += ((Rectangle2D)localObject2).getWidth();
          }
          label1039:
          label1040:
          this.k.a(a(this.j, new Rectangle2D.Double(d2, d3, d4, d5)));
        }
      }
    }
    label1069:
    label1070:
    this.e.a().gb();
  }
  
  private void f(double paramDouble1, double paramDouble2)
  {
    int i4 = f.Wb;
    boolean bool = f.Vb;
    if ((i4 != 0) || (this.f != null))
    {
      f.p_ localp_1 = this.f.eb().a(paramDouble1, paramDouble2);
      if ((i4 != 0) || (localp_1 != null)) {
        if (localp_1 != this.i)
        {
          if (i4 != 0) {
            break label422;
          }
          if (this.v + 1 >= this.w) {}
        }
        else
        {
          int i1 = a(localp_1);
          if (localp_1 != this.i) {
            if (i4 != 0) {}
          }
          u localu;
          do
          {
            if (i1 + this.v > this.w)
            {
              localp_1 = (f.p_)localp_1.a();
              i1--;
              if (!bool) {
                break;
              }
            }
            localu = localp_1.i();
            localObject1 = localp_1.h();
          } while (i4 != 0);
          if ((i1 + this.v >= this.w) || ((localu != null) && (paramDouble1 < ((Rectangle2D)localObject1).getX() + localu.c)))
          {
            localObject2 = localp_1.a();
            if (i4 != 0) {
              break label219;
            }
            i2 = localp_1.b();
            if (!bool) {
              break label309;
            }
          }
          label219:
          localObject2 = localp_1;
          if (localu != null)
          {
            if (i4 != 0) {
              break label307;
            }
            if (paramDouble2 > ((Rectangle2D)localObject1).getMaxY() - localu.d)
            {
              if (i4 == 0) {
                if (localObject2 == this.i.a())
                {
                  i2 = ((f.q_)localObject2).n() - 1;
                  if (i4 != 0) {
                    break label298;
                  }
                  if (!bool) {
                    break label309;
                  }
                }
              }
              i2 = ((f.q_)localObject2).n();
              label298:
              if ((i4 == 0) && (!bool)) {
                break label309;
              }
            }
          }
          label307:
          int i2 = 0;
          label309:
          Object localObject3 = localObject2;
          int i3 = 0;
          do
          {
            do
            {
              if (!(localObject3 instanceof f.p_)) {
                break;
              }
              if (i4 == 0) {
                if (localObject3 == this.i) {
                  i3 = 1;
                }
              }
              localObject3 = ((f.p_)localObject3).a();
            } while (!bool);
          } while (i4 != 0);
          if (i4 == 0) {
            if (i3 != 0)
            {
              this.o = this.m;
              this.u = this.t;
              if (i4 == 0) {
                if (!bool) {
                  return;
                }
              }
            }
            else
            {
              this.o = ((f.q_)localObject2);
              if (i4 != 0) {
                break label422;
              }
              this.u = i2;
            }
          }
          if (!bool) {
            return;
          }
        }
      }
      label422:
      double d = this.f.b() + this.f.rb();
      Object localObject1 = this.f.eb();
      if (i4 == 0)
      {
        if (paramDouble2 < d)
        {
          this.o = ((f.q_)localObject1);
          this.u = 0;
        }
      }
      else if (!bool) {
        return;
      }
      Object localObject2 = ((f.r_)localObject1).o().iterator();
      while (((Iterator)localObject2).hasNext())
      {
        f.p_ localp_2 = (f.p_)((Iterator)localObject2).next();
        d += localp_2.g();
        if (paramDouble2 < d)
        {
          this.o = ((f.q_)localObject1);
          this.u = localp_2.b();
          if (i4 != 0) {
            break label564;
          }
          if (bool) {
            return;
          }
        }
      }
      if (paramDouble2 >= d)
      {
        label564:
        if (i4 == 0) {
          this.o = ((f.q_)localObject1);
        }
        this.u = (this.m == localObject1 ? ((f.r_)localObject1).n() - 1 : ((f.r_)localObject1).n());
      }
    }
  }
  
  private void g(double paramDouble1, double paramDouble2)
  {
    int i4 = f.Wb;
    boolean bool = f.Vb;
    if ((i4 != 0) || (this.f != null))
    {
      f.n_ localn_1 = this.f.eb().b(paramDouble1, paramDouble2);
      if ((i4 != 0) || (localn_1 != null)) {
        if (localn_1 != this.j)
        {
          if (i4 != 0) {
            break label422;
          }
          if (this.v + 1 >= this.x) {}
        }
        else
        {
          int i1 = a(localn_1);
          if (localn_1 != this.j) {
            if (i4 != 0) {}
          }
          u localu;
          do
          {
            if (i1 + this.v > this.x)
            {
              localn_1 = (f.n_)localn_1.a();
              i1--;
              if (!bool) {
                break;
              }
            }
            localu = localn_1.i();
            localObject1 = localn_1.h();
          } while (i4 != 0);
          if ((i1 + this.v >= this.x) || ((localu != null) && (paramDouble2 < ((Rectangle2D)localObject1).getY() + localu.b)))
          {
            localObject2 = localn_1.a();
            if (i4 != 0) {
              break label219;
            }
            i2 = localn_1.b();
            if (!bool) {
              break label309;
            }
          }
          label219:
          localObject2 = localn_1;
          if (localu != null)
          {
            if (i4 != 0) {
              break label307;
            }
            if (paramDouble1 > ((Rectangle2D)localObject1).getMaxX() - localu.e)
            {
              if (i4 == 0) {
                if (localObject2 == this.j.a())
                {
                  i2 = ((f.o_)localObject2).k() - 1;
                  if (i4 != 0) {
                    break label298;
                  }
                  if (!bool) {
                    break label309;
                  }
                }
              }
              i2 = ((f.o_)localObject2).k();
              label298:
              if ((i4 == 0) && (!bool)) {
                break label309;
              }
            }
          }
          label307:
          int i2 = 0;
          label309:
          Object localObject3 = localObject2;
          int i3 = 0;
          do
          {
            do
            {
              if (!(localObject3 instanceof f.n_)) {
                break;
              }
              if (i4 == 0) {
                if (localObject3 == this.j) {
                  i3 = 1;
                }
              }
              localObject3 = ((f.n_)localObject3).a();
            } while (!bool);
          } while (i4 != 0);
          if (i4 == 0) {
            if (i3 != 0)
            {
              this.p = this.n;
              this.u = this.t;
              if (i4 == 0) {
                if (!bool) {
                  return;
                }
              }
            }
            else
            {
              this.p = ((f.o_)localObject2);
              if (i4 != 0) {
                break label422;
              }
              this.u = i2;
            }
          }
          if (!bool) {
            return;
          }
        }
      }
      label422:
      double d = this.f.a() + this.f.tb();
      Object localObject1 = this.f.eb();
      if (i4 == 0)
      {
        if (paramDouble1 < d)
        {
          this.p = ((f.o_)localObject1);
          this.u = 0;
        }
      }
      else if (!bool) {
        return;
      }
      Object localObject2 = ((f.r_)localObject1).l().iterator();
      while (((Iterator)localObject2).hasNext())
      {
        f.n_ localn_2 = (f.n_)((Iterator)localObject2).next();
        d += localn_2.g();
        if (paramDouble1 < d)
        {
          this.p = ((f.o_)localObject1);
          this.u = localn_2.b();
          if (i4 != 0) {
            break label564;
          }
          if (bool) {
            return;
          }
        }
      }
      if (paramDouble1 >= d)
      {
        label564:
        if (i4 == 0) {
          this.p = ((f.o_)localObject1);
        }
        this.u = (this.n == localObject1 ? ((f.r_)localObject1).k() - 1 : ((f.r_)localObject1).k());
      }
    }
  }
  
  private int a(f.p_ paramp_)
  {
    int i2 = f.Wb;
    boolean bool = f.Vb;
    int i1 = 1;
    f.q_ localq_ = paramp_.a();
    do
    {
      do
      {
        if (!(localq_ instanceof f.p_)) {
          break;
        }
        i1++;
        localq_ = ((f.p_)localq_).a();
      } while (!bool);
    } while (i2 != 0);
    return i1;
  }
  
  private int a(f.n_ paramn_)
  {
    int i2 = f.Wb;
    boolean bool = f.Vb;
    int i1 = 1;
    f.o_ localo_ = paramn_.a();
    do
    {
      do
      {
        if (!(localo_ instanceof f.n_)) {
          break;
        }
        i1++;
        localo_ = ((f.n_)localo_).a();
      } while (!bool);
    } while (i2 != 0);
    return i1;
  }
  
  private int b(f.p_ paramp_)
  {
    int i4 = f.Wb;
    boolean bool = f.Vb;
    int i1 = 0;
    if ((i4 != 0) || (paramp_.n() > 0))
    {
      List localList = paramp_.o();
      int i2 = 0;
      do
      {
        if (i2 >= localList.size()) {
          break;
        }
        f.p_ localp_ = (f.p_)localList.get(i2);
        int i3 = b(localp_);
        if ((i4 == 0) && (bool)) {
          break label105;
        }
        if ((i4 != 0) || (i3 + 1 > i1)) {
          i1 = i3 + 1;
        }
        i2++;
      } while (!bool);
    }
    label105:
    return i1;
  }
  
  private int b(f.n_ paramn_)
  {
    int i4 = f.Wb;
    boolean bool = f.Vb;
    int i1 = 0;
    if ((i4 != 0) || (paramn_.k() > 0))
    {
      List localList = paramn_.l();
      int i2 = 0;
      do
      {
        if (i2 >= localList.size()) {
          break;
        }
        f.n_ localn_ = (f.n_)localList.get(i2);
        int i3 = b(localn_);
        if ((i4 == 0) && (bool)) {
          break label105;
        }
        if ((i4 != 0) || (i3 + 1 > i1)) {
          i1 = i3 + 1;
        }
        i2++;
      } while (!bool);
    }
    label105:
    return i1;
  }
  
  public void d()
  {
    if (f.Wb == 0)
    {
      if (this.k.a() != null)
      {
        this.k.a(null);
        this.e.b(this.k);
      }
      this.e.a(Cursor.getDefaultCursor());
      this.e.a().gb();
    }
    super.d();
  }
  
  protected qb a(f.p_ paramp_, Rectangle2D paramRectangle2D)
  {
    int i1 = f.Wb;
    if (i1 == 0) {
      if (this.l == null) {
        this.l = new g.b_();
      }
    }
    this.l.a(true);
    if (i1 == 0)
    {
      if ((paramp_ != null) && (paramp_.i() != null)) {
        this.l.a(paramp_.i().c);
      }
      this.l.a(paramRectangle2D.getX(), paramRectangle2D.getY(), paramRectangle2D.getWidth(), paramRectangle2D.getHeight());
    }
    return this.l;
  }
  
  protected qb a(f.n_ paramn_, Rectangle2D paramRectangle2D)
  {
    int i1 = f.Wb;
    if (i1 == 0) {
      if (this.l == null) {
        this.l = new g.b_();
      }
    }
    this.l.a(false);
    if (i1 == 0)
    {
      if ((paramn_ != null) && (paramn_.i() != null)) {
        this.l.a(paramn_.i().b);
      }
      this.l.a(paramRectangle2D.getX(), paramRectangle2D.getY(), paramRectangle2D.getWidth(), paramRectangle2D.getHeight());
    }
    return this.l;
  }
  
  public int i()
  {
    return this.w;
  }
  
  public void a(int paramInt)
  {
    if (paramInt > 0) {
      this.w = paramInt;
    }
  }
  
  public int j()
  {
    return this.x;
  }
  
  public void b(int paramInt)
  {
    if (paramInt > 0) {
      this.x = paramInt;
    }
  }
  
  public byte k()
  {
    return this.r;
  }
  
  public void a(byte paramByte)
  {
    if (f.Wb == 0) {}
    switch (paramByte)
    {
    case 1: 
    case 2: 
      this.r = paramByte;
      if (!f.Vb) {
        break;
      }
    default: 
      throw new IllegalArgumentException();
    }
  }
  
  public boolean a(ng paramng)
  {
    int i1 = f.Wb;
    if ((i1 != 0) || (e(paramng))) {
      if (i1 != 0) {}
    }
    return a(paramng.a(), paramng.b());
  }
  
  public void b(ng paramng)
  {
    int i1 = f.Wb;
    boolean bool = f.Vb;
    if (i1 == 0) {}
    switch (paramng.c())
    {
    case 501: 
      if (i1 == 0)
      {
        if (d(paramng)) {
          b(paramng.a(), paramng.b());
        }
      }
      else if (i1 == 0) {
        if (!bool) {
          return;
        }
      }
      break;
    case 506: 
      d(paramng.a(), paramng.b());
    case 502: 
      if ((i1 != 0) || ((bool) && ((i1 != 0) || (d(paramng))))) {
        c(paramng.a(), paramng.b());
      }
      break;
    }
  }
  
  public Cursor c(ng paramng)
  {
    if ((f.Wb != 0) || (a(paramng.a(), paramng.b()))) {
      return Cursor.getPredefinedCursor(13);
    }
    return null;
  }
  
  public boolean l()
  {
    return this.s;
  }
  
  public void b(boolean paramBoolean)
  {
    this.s = paramBoolean;
  }
  
  void g()
  {
    super.g();
    this.i = null;
    this.j = null;
    this.m = null;
    this.n = null;
    this.o = null;
    this.p = null;
  }
}



/* Location:           E:\idea\

 * Qualified Name:     a.j.b.c

 * JD-Core Version:    0.7.0.1

 */